@@ -162,6 +162,24 @@ AWS_ACCESS_KEY="your aws access key" |
||
| 162 | 162 |
# Set AWS_SANDBOX to true if you're developing Huginn code. |
| 163 | 163 |
AWS_SANDBOX=false |
| 164 | 164 |
|
| 165 |
+######################### |
|
| 166 |
+# Additional Agent gems # |
|
| 167 |
+######################### |
|
| 168 |
+ |
|
| 169 |
+# Agent gems can be added to Huginn by specifying them in a comma separated |
|
| 170 |
+# list, the gem version and arguments for the gem command are optional. |
|
| 171 |
+# When not providing a git(hub) repository the gem needs to be published to |
|
| 172 |
+# https://rubygems.org. |
|
| 173 |
+# Check http://bundler.io/v1.11/git.html for a list of valid arguments. |
|
| 174 |
+# |
|
| 175 |
+# Configuration examples: |
|
| 176 |
+# |
|
| 177 |
+# ADDITIONAL_GEMS=huginn_nlp_agents,test_agent |
|
| 178 |
+# ADDITIONAL_GEMS=huginn_nlp_agents(~> 0.2.1),test_agent |
|
| 179 |
+# ADDITIONAL_GEMS=huginn_nlp_agents(git: https://github.com/kreuzwerker/DKT.huginn_nlp_agents.git),test_agent |
|
| 180 |
+# ADDITIONAL_GEMS=huginn_nlp_agents(github: kreuzwerker/DKT.huginn_nlp_agents),test_agent |
|
| 181 |
+# ADDITIONAL_GEMS=huginn_nlp_agents(~> 0.2.1, git: https://github.com/kreuzwerker/DKT.huginn_nlp_agents.git),test_agent |
|
| 182 |
+ |
|
| 165 | 183 |
######################## |
| 166 | 184 |
# Various Settings # |
| 167 | 185 |
######################## |
@@ -195,3 +195,7 @@ end |
||
| 195 | 195 |
if_true(ENV['DATABASE_ADAPTER'].strip == 'mysql2') do |
| 196 | 196 |
gem 'mysql2', '~> 0.3.20' |
| 197 | 197 |
end |
| 198 |
+ |
|
| 199 |
+GemfileHelper.parse_each_agent_gem(ENV['ADDITIONAL_GEMS']) do |args| |
|
| 200 |
+ gem *args |
|
| 201 |
+end |
@@ -19,8 +19,33 @@ class GemfileHelper |
||
| 19 | 19 |
) |
| 20 | 20 |
end |
| 21 | 21 |
|
| 22 |
+ GEM_NAME = '[A-Za-z0-9\.\-\_]+'.freeze |
|
| 23 |
+ GEM_OPTIONS = '(.+?)\s*(?:,\s*(.+?)){0,1}'.freeze
|
|
| 24 |
+ GEM_SEPARATOR = '\s*(?:,|\z)'.freeze |
|
| 25 |
+ GEM_REGULAR_EXPRESSION = /(#{GEM_NAME})(?:\(#{GEM_OPTIONS}\)){0,1}#{GEM_SEPARATOR}/
|
|
| 26 |
+ |
|
| 27 |
+ def parse_each_agent_gem(string) |
|
| 28 |
+ return unless string |
|
| 29 |
+ string.scan(GEM_REGULAR_EXPRESSION).each do |name, version, args| |
|
| 30 |
+ if version =~ /\w+:/ |
|
| 31 |
+ args = "#{version},#{args}"
|
|
| 32 |
+ version = nil |
|
| 33 |
+ end |
|
| 34 |
+ yield [name, version, parse_gem_args(args)].compact |
|
| 35 |
+ end |
|
| 36 |
+ end |
|
| 37 |
+ |
|
| 22 | 38 |
private |
| 23 | 39 |
|
| 40 |
+ def parse_gem_args(args) |
|
| 41 |
+ return nil unless args |
|
| 42 |
+ options = {}
|
|
| 43 |
+ args.scan(/(\w+):\s*(.+?)#{GEM_SEPARATOR}/).each do |key, value|
|
|
| 44 |
+ options[key.to_sym] = value |
|
| 45 |
+ end |
|
| 46 |
+ options |
|
| 47 |
+ end |
|
| 48 |
+ |
|
| 24 | 49 |
def sanity_check(env) |
| 25 | 50 |
return if ENV['CI'] == 'true' || !env.empty? |
| 26 | 51 |
puts warning |
@@ -0,0 +1,48 @@ |
||
| 1 |
+require 'rails_helper' |
|
| 2 |
+ |
|
| 3 |
+describe GemfileHelper do |
|
| 4 |
+ context 'parse_each_agent_gem' do |
|
| 5 |
+ VALID_STRINGS = [ |
|
| 6 |
+ ['huginn_nlp_agents(~> 0.2.1)', [ |
|
| 7 |
+ ['huginn_nlp_agents', '~> 0.2.1'] |
|
| 8 |
+ ]], |
|
| 9 |
+ ['huginn_nlp_agents(~> 0.2.1, git: http://github.com/dsander/huginn.git, branch: agents_in_gems)', |
|
| 10 |
+ [['huginn_nlp_agents', '~> 0.2.1', git: 'http://github.com/dsander/huginn.git', branch: 'agents_in_gems']] |
|
| 11 |
+ ], |
|
| 12 |
+ ['huginn_nlp_agents(~> 0.2.1, git: http://github.com/dsander/huginn.git, ref: 2342asdab) , huginn_nlp_agents(~> 0.2.1)', [ |
|
| 13 |
+ ['huginn_nlp_agents', '~> 0.2.1', git: 'http://github.com/dsander/huginn.git', ref: '2342asdab'], |
|
| 14 |
+ ['huginn_nlp_agents', '~> 0.2.1'] |
|
| 15 |
+ ]], |
|
| 16 |
+ ['huginn_nlp_agents(~> 0.2.1, path: /tmp/test)', [ |
|
| 17 |
+ ['huginn_nlp_agents', '~> 0.2.1', path: '/tmp/test'] |
|
| 18 |
+ ]], |
|
| 19 |
+ ['huginn_nlp_agents', [ |
|
| 20 |
+ ['huginn_nlp_agents'] |
|
| 21 |
+ ]], |
|
| 22 |
+ ['huginn_nlp_agents, test(0.1), test2(github: test2/huginn_test)', [ |
|
| 23 |
+ ['huginn_nlp_agents'], |
|
| 24 |
+ ['test', '0.1'], |
|
| 25 |
+ ['test2', github: 'test2/huginn_test'] |
|
| 26 |
+ ]], |
|
| 27 |
+ ['huginn_nlp_agents(git: http://github.com/dsander/huginn.git, ref: 2342asdab)', [ |
|
| 28 |
+ ['huginn_nlp_agents', git: 'http://github.com/dsander/huginn.git', ref: '2342asdab'] |
|
| 29 |
+ ]], |
|
| 30 |
+ ] |
|
| 31 |
+ |
|
| 32 |
+ it 'parses valid gem strings correctly' do |
|
| 33 |
+ VALID_STRINGS.each do |string, outcomes| |
|
| 34 |
+ GemfileHelper.parse_each_agent_gem(string) do |args| |
|
| 35 |
+ expect(args).to eq(outcomes.shift) |
|
| 36 |
+ end |
|
| 37 |
+ end |
|
| 38 |
+ end |
|
| 39 |
+ |
|
| 40 |
+ it 'does nothing when nil is passed' do |
|
| 41 |
+ expect { |b| GemfileHelper.parse_each_agent_gem(nil, &b) }.not_to yield_control
|
|
| 42 |
+ end |
|
| 43 |
+ |
|
| 44 |
+ it 'does nothing when an empty string is passed' do |
|
| 45 |
+ expect { |b| GemfileHelper.parse_each_agent_gem('', &b) }.not_to yield_control
|
|
| 46 |
+ end |
|
| 47 |
+ end |
|
| 48 |
+end |